//package com.sright.bcard.user.biz.utils;
//
//import java.lang.reflect.Method;
//import java.util.*;
//
//public class MapUtils {
//
//    /**
//     *
//     * @param map
//     * @param sortType 排序类型，0：升序  1：降序
//     * @param <K>
//     * @param <V>
//     * @return
//     */
//    public static <K, V extends Comparable<? super V>> Map<K, V>
//    sortByValue( Map<K, V> map, Integer sortType )
//    {
//        List<Map.Entry<K, V>> list =
//                new LinkedList<Map.Entry<K, V>>( map.entrySet() );
//        list.sort((o1, o2) -> {
//            if (sortType == 0) {
//                return (o1.getValue()).compareTo(o2.getValue());
//            } else {
//                return -(o1.getValue()).compareTo(o2.getValue());
//            }
//        });
//
//        Map<K, V> result = new LinkedHashMap<K, V>();
//        for (Map.Entry<K, V> entry : list)
//        {
//            result.put( entry.getKey(), entry.getValue() );
//        }
//        return result;
//    }
//
//    /**
//     * 把元素放到map value集合中，value为空自动创建
//     * @param map
//     * @param key
//     * @param value
//     * @param <K>
//     * @param <V>
//     */
//    public static<K,V> void putListElement(Map<K,List<V>> map,K key,V value){
//        List<V> dataList = map.get(key);
//        if(dataList == null){
//            dataList = new ArrayList<>();
//            map.put(key,dataList);
//        }
//        dataList.add(value);
//    }
//
//    /**
//     * 通过属性对集合分组
//     * @param colls
//     * @param gb
//     * @return
//     * extends Comparable<T>
//     */
//    public static final <T,D> Map<T ,List<D>> groupBy(Collection<D> colls ,GroupBy<T> gb){
//        Map<T ,List<D>> map = new HashMap<T, List<D>>();
//
//        Iterator<D> iter = colls.iterator() ;
//
//        while(iter.hasNext()) {
//            D d = iter.next() ;
//            T t = gb.groupBy(d) ;
//            if(map.containsKey(t)) {
//                map.get(t).add(d) ;
//            } else {
//                List<D> list = new ArrayList<D>() ;
//                list.add(d) ;
//                map.put(t, list) ;
//            }
//        }
//        return map ;
//    }
//
//    /**
//     * 分组依据接口，用于集合分组时，获取分组
//     * T为要groupBy属性是类型，这个返回值为要groupBy的属性值
//     */
//    public interface GroupBy<T> {
//        T groupBy(Object obj) ;
//    }
//
//    /**
//     * 通过属性名称对集合分组
//     * @param colls
//     * @param fieldName 为集合中对象的属性名称
//     * @return
//     * extends Comparable<T>
//     */
//    public static final <T,D> Map<T ,List<D>> groupBy(Collection<D> colls ,String fieldName){
//        return groupBy(colls,new GroupBy<T>(){
//            @Override
//            public T groupBy(Object obj){
//                Object v = getFieldValueByName(obj,fieldName);
//                return (T)v;
//            }
//        });
//    }
//
//    /**
//     * 根据属性名称获取属性值
//     * */
//    public static Object getFieldValueByName(Object o,String fieldName) {
//        try {
//            String firstLetter = fieldName.substring(0, 1).toUpperCase();
//            String getter = "get" + firstLetter + fieldName.substring(1);
//            Method method = o.getClass().getMethod(getter, new Class[] {});
//            Object value = method.invoke(o, new Object[] {});
//            return value;
//        } catch (Exception e) {
//            return null;
//        }
//    }
//
//}
